博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JAVA】三层架构,综合练习
阅读量:4286 次
发布时间:2019-05-27

本文共 30834 字,大约阅读时间需要 102 分钟。

三层架构:软件设计架构

  1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
  2. 业务逻辑层:处理业务逻辑的。
  3. 数据访问层:操作数据存储文件。

三层架构与MVC相似但有区别

在这里插入图片描述
在这里插入图片描述

开发前的准备工作

1. 需求:用户信息的增删改查操作2. 设计:	1. 技术选型:Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat	2. 数据库设计:		create database day17; -- 创建数据库		use day17; 			   -- 使用数据库		create table user(   -- 创建表			id int primary key auto_increment,			name varchar(20) not null,			gender varchar(5),			age int,			address varchar(32),			qq	varchar(20),			email varchar(50),			username varchar(32),			password varchar(32)		);3. 开发:	1. 环境搭建		1. 创建数据库环境		2. 创建项目,导入需要的jar包	2. 编码4. 测试5. 部署运维

综合练习:简单功能

  1. 列表查询

    在这里插入图片描述

  2. 登录

  3. 添加

在这里插入图片描述

4. 删除
在这里插入图片描述
5. 修改
在这里插入图片描述

综合练习:复杂功能

  1. 删除选中
    在这里插入图片描述
  2. 分页查询

在这里插入图片描述

在这里插入图片描述
复杂条件分页查询
在这里插入图片描述

  • 分页查询好处:
1. 减轻服务器内存的开销2. 提升用户体验
  1. 复杂条件查询

项目工程结构

在这里插入图片描述

在这里插入图片描述
dao层用来操作数据库
domain文件夹是两个javabean类,含有PageBean和User类
service服务层含一个用户服务的接口和对应实现类
utils文件夹是JDBCUtils工具类便于数据库连接,JDBC工具类 使用Durid连接池
servlet用于接收前端的请求
web文件夹,存放前端的东西,如js,fonts,jsp页面等

项目运行逻辑

  1. 首先运行好tomcat服务器,用户来到首页login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>    
管理员登录

管理员登录


  1. 用户输入用户名,密码,验证码跳转到loginservlet
package cn.itcast.web.servlet;import cn.itcast.domain.User;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Map;@WebServlet("/loginServlet")public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码 request.setCharacterEncoding("utf-8"); //2.获取数据 //2.1获取用户填写验证码 String verifycode = request.getParameter("verifycode"); //3.验证码校验 HttpSession session = request.getSession(); String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER"); session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性 if(!checkcode_server.equalsIgnoreCase(verifycode)){
//验证码不正确 //提示信息 request.setAttribute("login_msg","验证码错误!"); //跳转登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); return; } Map
map = request.getParameterMap(); //4.封装User对象 User user = new User(); try {
BeanUtils.populate(user,map); } catch (IllegalAccessException e) {
e.printStackTrace(); } catch (InvocationTargetException e) {
e.printStackTrace(); } //5.调用Service查询 UserService service = new UserServiceImpl(); User loginUser = service.login(user); //6.判断是否登录成功 if(loginUser != null){
//登录成功 //将用户存入session session.setAttribute("user",loginUser); //跳转页面 response.sendRedirect(request.getContextPath()+"/index.jsp"); }else{
//登录失败 //提示信息 request.setAttribute("login_msg","用户名或密码错误!"); //跳转登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}
  1. 如果用户验证码输入错误,则可以更换验证码,跳转到checkcodeservlet
package cn.itcast.web.servlet;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;/** * 验证码 */@WebServlet("/checkCodeServlet")public class CheckCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//服务器通知浏览器不要缓存 response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setHeader("expires","0"); //在内存中创建一个长80,宽30的图片,默认黑色背景 //参数一:长 //参数二:宽 //参数三:颜色 int width = 80; int height = 30; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //获取画笔 Graphics g = image.getGraphics(); //设置画笔颜色为灰色 g.setColor(Color.GRAY); //填充图片 g.fillRect(0,0, width,height); //产生4个随机验证码,12Ey String checkCode = getCheckCode(); //将验证码放入HttpSession中 request.getSession().setAttribute("CHECKCODE_SERVER",checkCode); //设置画笔颜色为黄色 g.setColor(Color.YELLOW); //设置字体的小大 g.setFont(new Font("黑体",Font.BOLD,24)); //向图片上写入验证码 g.drawString(checkCode,15,25); //将内存中的图片输出到浏览器 //参数一:图片对象 //参数二:图片的格式,如PNG,JPG,GIF //参数三:图片输出到哪里去 ImageIO.write(image,"PNG",response.getOutputStream()); } /** * 产生4位随机字符串 */ private String getCheckCode() {
String base = "0123456789ABCDEFGabcdefg"; int size = base.length(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=1;i<=4;i++){
//产生0到size-1的随机值 int index = r.nextInt(size); //在base字符串中获取下标为index的字符 char c = base.charAt(index); //将c放入到StringBuffer中去 sb.append(c); } return sb.toString(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response); }}
  1. 登陆成功以后,来到index.jsp,点击查询用户所有信息,跳转到findUserByPageServlet
    index.jsp如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
首页
${
user.name},欢迎您

findUserByPageServlet如下,将查询的结果转发到list.jsp

package cn.itcast.web.servlet;import cn.itcast.domain.PageBean;import cn.itcast.domain.User;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Map;@WebServlet("/findUserByPageServlet")public class FindUserByPageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); //1.获取参数 String currentPage = request.getParameter("currentPage");//当前页码 String rows = request.getParameter("rows");//每页显示条数 if(currentPage == null || "".equals(currentPage)){
currentPage = "1"; } if(rows == null || "".equals(rows)){
rows = "5"; } //获取条件查询参数 Map
condition = request.getParameterMap(); //2.调用service查询 UserService service = new UserServiceImpl(); PageBean
pb = service.findUserByPage(currentPage,rows,condition); System.out.println(pb); //3.将PageBean存入request request.setAttribute("pb",pb); request.setAttribute("condition",condition);//将查询条件存入request //4.转发到list.jsp request.getRequestDispatcher("/list.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}
  1. list.jsp如下,可以看到查询的结果
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
用户信息管理系统

用户信息列表

编号 姓名 性别 年龄 籍贯 QQ 邮箱 操作
${ s.count} ${ user.name} ${ user.gender} ${ user.age} ${ user.address} ${ user.qq} ${ user.email} 修改  删除

在这里插入图片描述

7.接着在list.jsp点击删除按钮,可以删除单条记录,跳转deluserservlet如下;
deluserservlet

package cn.itcast.web.servlet;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/delUserServlet")public class DelUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取id String id = request.getParameter("id"); //2.调用service删除 UserService service = new UserServiceImpl(); service.deleteUser(id); //3.跳转到查询所有Servlet response.sendRedirect(request.getContextPath()+"/userListServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}

8而点击删除选中,可以删掉选中的多条记录DelSelectedServlet

package cn.itcast.web.servlet;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/delSelectedServlet")public class DelSelectedServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取所有id String[] ids = request.getParameterValues("uid"); //2.调用service删除 UserService service = new UserServiceImpl(); service.delSelectedUser(ids); //3.跳转查询所有Servlet response.sendRedirect(request.getContextPath()+"/userListServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}

8点击修改按钮,跳转到finduserServlet,再将查询到的信息转发回显到update.jsp

finduserServlet

package cn.itcast.web.servlet;import cn.itcast.domain.User;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/findUserServlet")public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取id String id = request.getParameter("id"); //2.调用Service查询 UserService service = new UserServiceImpl(); User user = service.findUserById(id); //3.将user存入request request.setAttribute("user",user); //4.转发到update.jsp request.getRequestDispatcher("/update.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}

update.jsp,在该页面点击跳转updateUserServlet修改联系人生效

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
修改用户

修改联系人

updateUserServlet如下

package cn.itcast.web.servlet;import cn.itcast.domain.User;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Map;@WebServlet("/updateUserServlet")public class UpdateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码 request.setCharacterEncoding("utf-8"); //2.获取map Map
map = request.getParameterMap(); //3.封装对象 User user = new User(); try {
BeanUtils.populate(user,map); } catch (IllegalAccessException e) {
e.printStackTrace(); } catch (InvocationTargetException e) {
e.printStackTrace(); } //4.调用Service修改 UserService service = new UserServiceImpl(); service.updateUser(user); //5.跳转到查询所有Servlet response.sendRedirect(request.getContextPath()+"/userListServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}

最后是添加联系人功能,点击添加联系人按钮,跳转到add.jsp,在add.jsp页面里面输入添加的信息,然后再跳转到addUserServlet

add.jsp如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
添加用户

添加联系人页面

addUserServlet如下

package cn.itcast.web.servlet;import cn.itcast.domain.User;import cn.itcast.service.UserService;import cn.itcast.service.impl.UserServiceImpl;import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Map;@WebServlet("/addUserServlet")public class AddUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码 request.setCharacterEncoding("utf-8"); //2.获取参数 Map
map = request.getParameterMap(); //3.封装对象 User user = new User(); try {
BeanUtils.populate(user,map); } catch (IllegalAccessException e) {
e.printStackTrace(); } catch (InvocationTargetException e) {
e.printStackTrace(); } //4.调用Service保存 UserService service = new UserServiceImpl(); service.addUser(user); //5.跳转到userListServlet response.sendRedirect(request.getContextPath()+"/userListServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); }}

对于dao层有一个接口和对应的实现类

package cn.itcast.dao;import cn.itcast.domain.User;import java.util.List;import java.util.Map;/** * 用户操作的DAO */public interface UserDao {
public List
findAll(); User findUserByUsernameAndPassword(String username, String password); void add(User user); void delete(int id); User findById(int i); void update(User user); /** * 查询总记录数 * @return * @param condition */ int findTotalCount(Map
condition); /** * 分页查询每页记录 * @param start * @param rows * @param condition * @return */ List
findByPage(int start, int rows, Map
condition);}

实现类

package cn.itcast.dao.impl;import cn.itcast.dao.UserDao;import cn.itcast.domain.User;import cn.itcast.util.JDBCUtils;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;public class UserDaoImpl implements UserDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); @Override public List
findAll() {
//使用JDBC操作数据库... //1.定义sql String sql = "select * from user"; List
users = template.query(sql, new BeanPropertyRowMapper
(User.class)); return users; } @Override public User findUserByUsernameAndPassword(String username, String password) {
try {
String sql = "select * from user where username = ? and password = ?"; User user = template.queryForObject(sql, new BeanPropertyRowMapper
(User.class), username, password); return user; } catch (Exception e) {
e.printStackTrace(); return null; } } @Override public void add(User user) {
//1.定义sql String sql = "insert into user values(null,?,?,?,?,?,?,null,null)"; //2.执行sql template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail()); } @Override public void delete(int id) {
//1.定义sql String sql = "delete from user where id = ?"; //2.执行sql template.update(sql, id); } @Override public User findById(int id) {
String sql = "select * from user where id = ?"; return template.queryForObject(sql, new BeanPropertyRowMapper
(User.class), id); } @Override public void update(User user) {
String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?"; template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId()); } @Override public int findTotalCount(Map
condition) { //1.定义模板初始化sql String sql = "select count(*) from user where 1 = 1 "; StringBuilder sb = new StringBuilder(sql); //2.遍历map Set
keySet = condition.keySet(); //定义参数的集合 List
params = new ArrayList(); for (String key : keySet) { //排除分页条件参数 if("currentPage".equals(key) || "rows".equals(key)){ continue; } //获取value String value = condition.get(key)[0]; //判断value是否有值 if(value != null && !"".equals(value)){ //有值 sb.append(" and "+key+" like ? "); params.add("%"+value+"%");//?条件的值 } } System.out.println(sb.toString()); System.out.println(params); return template.queryForObject(sb.toString(),Integer.class,params.toArray()); } @Override public List
findByPage(int start, int rows, Map
condition) { String sql = "select * from user where 1 = 1 "; StringBuilder sb = new StringBuilder(sql); //2.遍历map Set
keySet = condition.keySet(); //定义参数的集合 List
params = new ArrayList(); for (String key : keySet) { //排除分页条件参数 if("currentPage".equals(key) || "rows".equals(key)){ continue; } //获取value String value = condition.get(key)[0]; //判断value是否有值 if(value != null && !"".equals(value)){ //有值 sb.append(" and "+key+" like ? "); params.add("%"+value+"%");//?条件的值 } } //添加分页查询 sb.append(" limit ?,? "); //添加分页查询参数值 params.add(start); params.add(rows); sql = sb.toString(); System.out.println(sql); System.out.println(params); return template.query(sql,new BeanPropertyRowMapper
(User.class),params.toArray()); }}

domain层的两个实体类,一个是PageBean,一个是User

package cn.itcast.domain;import java.util.List;/** * 分页对象 */public class PageBean
{
private int totalCount; // 总记录数 private int totalPage ; // 总页码 private List
list ; // 每页的数据 private int currentPage ; //当前页码 private int rows;//每页显示的记录数 public int getTotalCount() {
return totalCount; } public void setTotalCount(int totalCount) {
this.totalCount = totalCount; } public int getTotalPage() {
return totalPage; } public void setTotalPage(int totalPage) {
this.totalPage = totalPage; } public List
getList() {
return list; } public void setList(List
list) {
this.list = list; } public int getCurrentPage() {
return currentPage; } public void setCurrentPage(int currentPage) {
this.currentPage = currentPage; } public int getRows() {
return rows; } public void setRows(int rows) {
this.rows = rows; } @Override public String toString() {
return "PageBean{" + "totalCount=" + totalCount + ", totalPage=" + totalPage + ", list=" + list + ", currentPage=" + currentPage + ", rows=" + rows + '}'; }}
package cn.itcast.domain;public class User {
private int id; private String name; private String gender; private int age; private String address; private String qq; private String email; private String username; private String password; public String getUsername() {
return username; } public void setUsername(String username) {
this.username = username; } public String getPassword() {
return password; } public void setPassword(String password) {
this.password = password; } public int getId() {
return id; } public void setId(int id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getGender() {
return gender; } public void setGender(String gender) {
this.gender = gender; } public int getAge() {
return age; } public void setAge(int age) {
this.age = age; } public String getAddress() {
return address; } public void setAddress(String address) {
this.address = address; } public String getQq() {
return qq; } public void setQq(String qq) {
this.qq = qq; } public String getEmail() {
return email; } public void setEmail(String email) {
this.email = email; } @Override public String toString() {
return "User{" + "id=" + id + ", name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + ", address='" + address + '\'' + ", qq='" + qq + '\'' + ", email='" + email + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; }}

service有一个userService接口,和实现类

package cn.itcast.service;import cn.itcast.domain.PageBean;import cn.itcast.domain.User;import java.util.List;import java.util.Map;/** * 用户管理的业务接口 */public interface UserService {
/** * 查询所有用户信息 * @return */ public List
findAll(); /** * 登录方法 * @param user * @return */ User login(User user); /** * 保存User * @param user */ void addUser(User user); /** * 根据id删除User * @param id */ void deleteUser(String id); /** * 根据id查询 * @param id * @return */ User findUserById(String id); /** * 修改用户信息 * @param user */ void updateUser(User user); /** * 批量删除用户 * @param ids */ void delSelectedUser(String[] ids); /** * 分页条件查询 * @param currentPage * @param rows * @param condition * @return */ PageBean
findUserByPage(String currentPage, String rows, Map
condition);}

userservice实现类如下

package cn.itcast.service.impl;import cn.itcast.dao.UserDao;import cn.itcast.dao.impl.UserDaoImpl;import cn.itcast.domain.PageBean;import cn.itcast.domain.User;import cn.itcast.service.UserService;import java.util.List;import java.util.Map;public class UserServiceImpl implements UserService {
private UserDao dao = new UserDaoImpl(); @Override public List
findAll() {
//调用Dao完成查询 return dao.findAll(); } @Override public User login(User user) {
return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword()); } @Override public void addUser(User user) {
dao.add(user); } @Override public void deleteUser(String id) {
dao.delete(Integer.parseInt(id)); } @Override public User findUserById(String id) {
return dao.findById(Integer.parseInt(id)); } @Override public void updateUser(User user) {
dao.update(user); } @Override public void delSelectedUser(String[] ids) {
if(ids != null && ids.length > 0){
//1.遍历数组 for (String id : ids) {
//2.调用dao删除 dao.delete(Integer.parseInt(id)); } } } @Override public PageBean
findUserByPage(String _currentPage, String _rows, Map
condition) {
int currentPage = Integer.parseInt(_currentPage); int rows = Integer.parseInt(_rows); if(currentPage <=0) {
currentPage = 1; } //1.创建空的PageBean对象 PageBean
pb = new PageBean
(); //2.设置参数 pb.setCurrentPage(currentPage); pb.setRows(rows); //3.调用dao查询总记录数 int totalCount = dao.findTotalCount(condition); pb.setTotalCount(totalCount); //4.调用dao查询List集合 //计算开始的记录索引 int start = (currentPage - 1) * rows; List
list = dao.findByPage(start,rows,condition); pb.setList(list); //5.计算总页码 int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1; pb.setTotalPage(totalPage); return pb; }}

jdbc工具类代码

package cn.itcast.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;/** * JDBC工具类 使用Durid连接池 */public class JDBCUtils {
private static DataSource ds ; static {
try {
//1.加载配置文件 Properties pro = new Properties(); //使用ClassLoader加载配置文件,获取字节输入流 InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); //2.初始化连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) {
e.printStackTrace(); } catch (Exception e) {
e.printStackTrace(); } } /** * 获取连接池对象 */ public static DataSource getDataSource(){
return ds; } /** * 获取连接Connection对象 */ public static Connection getConnection() throws SQLException {
return ds.getConnection(); }}

druid.properties配置文件定义

在这里插入图片描述

遇到问题汇总

1 点击label标签有自动聚焦的功能

在这里插入图片描述

2 Bootstrap中文文档,组件之分页

https://v3.bootcss.com/components/#pagination

3 a标签使用js函数方法

https://blog.csdn.net/qq_23994787/article/details/77480049
另外input标签的点击事件也可以触发js函数

4 验证码校验的过程是,在后端的checkservlet中,编写生成验证码,并存入服务器的session,然后前端注册页面输入验证码之后点击注册,将前端传过来的验证码与session进行对比,校验即可

5 JAVA中request.getParameterMap()用法笔记

一个获取提交表单数据的新方法request.getParameterMap。

https://blog.csdn.net/lncsdn_123/article/details/78500328

6 foreach循环中的user对象,如果要到其他地方使用,可在js函数中进行传参

在这里插入图片描述
7 Confirm是js里面的警告函数,可以在前端弹出警告提示框
在这里插入图片描述

8 组件选中问题,在组件内编写点击事件函数,用this来代指id为“firstCb”的组件

在这里插入图片描述
9 前端的表单用submit方法提交,会把选中组件的id的值一并通过请求参数提交到后端

你可能感兴趣的文章
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>
Spring Boot 中使用一个注解轻松将 List 转换为 Excel 下载
查看>>
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
一口气说出 6种 延时队列的实现方案,大厂offer稳稳的
查看>>
原来redis这么简单,跟着文章操作一遍你就会了
查看>>
Redis两种持久化机制RDB和AOF详解(面试常问,工作常用)
查看>>
事务隔离级别中的可重复读能防幻读吗?
查看>>
老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
查看>>
图片的左右切换
查看>>
进级的RecyclerView——LRecyclerView
查看>>
Android 利用Gradle实现app的环境分离
查看>>
Android系统篇之----Binder机制和远程服务调用
查看>>
JavaScript DOM 属性
查看>>